# -*- coding: utf-8 -*-
from Class_ClienteDao import *
from burocracia import *

class ClienteController:
    def __init__(self):
        self.dao = ClienteDao()

    def cadastrarCliente(self, cliente):
        #O cliente possui CPF ?
        if (len(cliente.GetCPF()) != 0):
            #Sim, possui

            #O CPF é válido
            if (self.__CPFValido__(cliente.GetCPF())):
                #sim, é valido!

                #já existe algum cliente cadastrado com esse CPF?
                antigoCliente = self.dao.pesquisarCliente(cliente.GetCPF(), "CPF")
                if (antigoCliente == None):
                    #Não, nao existe!
                    return self.dao.cadastrarCliente(cliente)

                else:
                    return "Esse CPF ja esta cadastrado no sistema"

            else:
                return "CPF inválido!"

        else:
            #Não, Não possui
            return self.dao.cadastrarCliente(cliente)

    def editarCliente(self, cliente):
        #O cliente possui CPF ?
        if (len(cliente.GetCPF()) != 0):
            #Sim, possui

            #O CPF é válido
            if (self.__CPFValido__(cliente.GetCPF())):
                #sim, é valido!

                #já existe algum cliente cadastrado com esse CPF?
                antigoCliente = self.dao.pesquisarCliente(cliente.GetCPF(), "CPF")
                if (antigoCliente == None) or (antigoCliente.GetId() == cliente.GetId()):
                    #Não, nao existe!

                    return self.dao.editarCliente(cliente)                        
                    
                else:
                    return "Esse CPF ja esta cadastrado no sistema"

            else:
                return "CPF inválido!"

        else:
            #Não, Não possui
            return self.dao.editarCliente(cliente)


    def removerCliente(self, cliente):
        return self.dao.removerCliente(cliente)

    def pesquisarClientesNome(self, nome):
        nome = nome.upper()
        listaClientes = self.dao.pesquisarListaClientes(nome, "NomeCompleto")
        return listaClientes

    def pesquisarAniversariantes(self):
        from datetime import date
        hoje = date.today()
        hoje = hoje.replace(year = 2000)
        hoje = str(hoje)
        

        listaClientes = self.dao.pesquisarListaClientes(hoje, "DataNascimento")
        return listaClientes
        
        

    def __CPFValido__(self, cpf):
        try:
            cpf = CPF(cpf)
            return cpf.isValid()
        except:
            return False

if __name__ == "__main__":
    controller = ClienteController()
    
        
